package com.dao;

import com.entity.ErrorLog;
import com.entity.LoginHistory;
import com.entity.RegisterHistory;
import com.entity.VisitHistory;

import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface LogDao {
  String WEB_VISIT_TABLE_NAME = "web_visit";
  String WEB_VISIT_TIME_COLUMN = "web_visit_enter_time";
  String WEB_LOGIN_TABLE_NAME = "web_login_daily";
  String WEB_LOGIN_TIME_COLUMN = "web_login_enter_time";
  String WEB_REGISTER_TABLE_NAME = "register_time";
  String WEB_REGISTER_TIME_COLUMN = "register_time";

  // 查看注册记录
  List<RegisterHistory> selectRegisterHistory(
      @Param("startIndex") int startIndex, @Param("num") int num);

  // 添加注册记录
  void insertARegisterLog(@Param("userId") String userId);

  // 查看网页浏览记录
  List<VisitHistory> selectVisitHistory(@Param("startIndex") int startIndex, @Param("num") int num);

  // 添加游客浏览记录
  int insertAVisitLog(@Param("ip") String ip);

  int updateVisitLog(@Param("ip") String ip);

  // 查看网页访问记录
  List<LoginHistory> selectLoginHistory(@Param("startIndex") int startIndex, @Param("num") int num);

  // 添加登录记录(用户登录）
  int insertALoginLog(@Param("userId") String userId, @Param("ip") String ip);

  // 更新(用户退出)
  int updateLoginLog(@Param("userId") String userId, @Param("ip") String ip);

  // 查看错误日志
  List<ErrorLog> selectErrorHistory(@Param("startIndex") int startIndex, @Param("num") int num);

  int insertAErrorLog(@Param("title") String title, @Param("content") String content);

  int updateErrorLogStatus(int dailyId);

  // 获取某张表的给定日期内每个小时的访问量
  List<Map<String, Object>> selectPerHourCount(
      @Param("tableName") String tableName,
      @Param("columnName") String columnName,
      @Param("startDate") String startDate,
      @Param("numDate") String numDate);
  // 获取某个表（上面的登录、注册、或访问记录表)中给定月份每天的记录数目
  List<Map<String, Object>> selectPerDayCount(
      @Param("tableName") String tableName,
      @Param("columnName") String columnName,
      @Param("yearMonth") String yearMonth);

  List<Date> test();

  int updateDateTest(Date newTime);
}
